home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1997-03-30 | 15.8 KB | 509 lines |
- 10 'METSHOWR - Meteor Shower Predictor - 22 MAR 97 rev.30 MAR 97
- 20 CLS:KEY OFF:COLOR 7,0,1
- 30 IF EX$=""THEN EX$="EXIT"
- 40 UL$=STRING$(80,205)
- 50 DIM LDATE(400),LTIME(400),LELEV(400),LAZIM(400)
- 60 '
- 70 '.....start
- 80 CLS:COLOR 15,2
- 90 PRINT " METEOR SHOWER PREDICTIONS";TAB(57)"by Michael R. Owen W9IP ";
- 100 PRINT STRING$(80,32);
- 110 LOCATE CSRLIN-1,20:PRINT "edited for HAMCALC by George Murphy VE3ERP";
- 120 COLOR 1,0:PRINT STRING$(80,223);:COLOR 7,0
- 130 GOSUB 4660
- 140 COLOR 0,7:LOCATE ,24:PRINT " Press 1 to continue or 0 to EXIT ":COLOR 7,0
- 150 Z$=INKEY$:IF Z$=""THEN 150
- 160 IF Z$="0"THEN CLS:RUN EX$
- 170 IF Z$="1"THEN LOCATE CSRLIN-1:PRINT UL$;:GOTO 190
- 180 GOTO 150
- 190 COLOR 0,7:PRINT " Define your QTH: ":COLOR 7,0
- 200 PRINT " ENTER: Latitude in decimal degrees (+<UNK! {00F8}> if North, -<UNK! {00F8}> if South)";
- 210 INPUT MYLATD:IF MYLATD<0 THEN LA$="S"ELSE LA$="N"
- 220 PRINT " ENTER: Longitude in decimal degrees (+<UNK! {00F8}> if East, -<UNK! {00F8}> if West) ";
- 230 INPUT MYLOND:IF MYLOND<0 THEN LO$="W"ELSE LO$="E"
- 240 CLS
- 250 DEF FNACOS(X)=1.5708-ATN(X/SQR(1-X*X)) 'arccos
- 260 DEF FNARSIN(X)= ATN(X/SQR(1-X*X)) 'arcsin
- 270 '
- 280 '.....main menu
- 290 LENG=0:INCR=0:COUNTR=0:ENDER=1:BEST=0:HEADER=0:OPTDIR=0:BESEL=90
- 300 GOSUB 4580
- 310 '
- 320 CLS
- 330 PRINT " Press number in ( ) to select:"
- 340 PRINT UL$;
- 350 PRINT " (1) Peak Time Prediction"
- 360 PRINT " (2) Peak Time Prediction + Graph of AZ/EL of Radiant for a ";
- 370 PRINT "Particular Path"
- 380 PRINT " (3) Listing of Good Times for All Paths"
- 390 PRINT " (4) Best Path for a Particular Time"
- 400 PRINT
- 410 PRINT " (0) Program Main Menu"
- 420 Z$=INKEY$:IF Z$=""THEN 420
- 430 WHICH=VAL(Z$)
- 440 IF WHICH<1 THEN 70
- 450 IF WHICH>4 THEN 420
- 460 IF WHICH<>2 THEN 710 ELSE 490
- 470 GOTO 420
- 480 '
- 490 CLS: PRINT " Press letter in ( ) to select direction from your QTH at";
- 500 PRINT USING "###.#<UNK! {00F8}>";ABS(MYLATD);:PRINT LA$;USING "####.#<UNK! {00F8}>";ABS(MYLOND);
- 510 PRINT LO$
- 520 PRINT UL$;
- 530 PRINT " (a) North":PRINT " (b) Northeast": PRINT " (c) East"
- 540 PRINT " (d) Southeast": PRINT " (e) South": PRINT " (f) Southwest"
- 550 PRINT " (g) West": PRINT " (h) Northwest"
- 560 PRINT " (i) To a Specific Location"
- 570 PRINT " (j) Specific bearing (0<UNK! {00F8}>-360<UNK! {00F8}>) from your QTH"
- 580 Z$=INKEY$:IF Z$=""THEN 580
- 590 Z=ASC(Z$)
- 600 IF Z<97 OR Z>106 THEN 580 ELSE DIRECTION = Z-96
- 610 IF WHICH <>2 THEN 710
- 620 IF Z$="i"THEN 630 ELSE 690
- 630 COLOR 0,7:PRINT " Define the Specific Location: ":COLOR 7,0
- 640 PRINT " ENTER: Latitude in decimal degrees (+<UNK! {00F8}> if North, -<UNK! {00F8}> if South)";
- 650 INPUT HISLATD:IF HISLATD<0 THEN LA$="S"ELSE LA$="N"
- 660 PRINT " ENTER: Longitude in decimal degrees (+<UNK! {00F8}> if East, -<UNK! {00F8}> if West) ";
- 670 INPUT HISLOND:IF HISLOND<0 THEN LO$="W"ELSE LO$="E"
- 680 GOSUB 3450
- 690 IF Z$="j"THEN INPUT " ENTER: Bearing (decimal degrees)";LOOK
- 700 '
- 710 CLS
- 720 PRINT " METEOR SHOWER" TAB(23);"APPROX.DATE"
- 730 PRINT
- 740 PRINT " (1) QUADRANTIDS "TAB(25)"JAN 4"
- 750 PRINT " (2) LYRIDS "TAB(25)"APR 22"
- 760 PRINT " (3) ETA AQUARIDS"TAB(25)"MAY 4"
- 770 PRINT " (4) ARIETIDS "TAB(25)"JUN 7"
- 780 PRINT " (5) PERSEIDS "TAB(25)"AUG 12"
- 790 PRINT " (6) DRACONIDS "TAB(25)"OCT 10"
- 800 PRINT " (7) ORIONIDS "TAB(25)"OCT 20"
- 810 PRINT " (8) LEONIDS "TAB(25)"NOV 17"
- 820 PRINT " (9) GEMINIDS "TAB(25)"DEC 13"
- 830 PRINT
- 840 COLOR 0,7:PRINT " Press number in ( ) for shower information ":COLOR 7,0
- 850 Z$=INKEY$:IF Z$=""THEN 850
- 860 SHOWER=VAL(Z$)
- 870 IF SHOWER <1 OR SHOWER >9 THEN 850
- 880 LOCATE CSRLIN-1:PRINT STRING$(80,32);:LOCATE CSRLIN-1
- 890 GOSUB 3840: IF WHICH=1 THEN 2600
- 900 IF WHICH=4 THEN PRINT:INPUT " ENTER: Time GMT (####)...";STARTTIME:CENT$="Y":GOTO 980
- 910 '
- 920 PRINT UL$;
- 930 LENG=2400:INCR=60
- 940 STARTTIME=0
- 950 '* STARTTIME=0 IS AUTOMATIC
- 960 '* THIS LOOP "LOOKS" AROUND THE COMPASS AT 45 DEGREE INCREMENTS
- 970 IF WHICH=3 THEN FOR DIRECTION = 1 TO 8
- 980 ROUNDS=0
- 990 TIME=STARTTIME
- 1000 TIMECOUNT=TIME
- 1010 FINISH=TIMECOUNT+LENG+100
- 1020 GOSUB 2690: T=S*15*R1
- 1030 IF COUNTR>0 THEN 1180
- 1040 '* INPUT RIGHT ASCENSION DATA: RAHOUR, RAMIN IN DATA STATEMENT.
- 1050 '* A$ IS HOURS, A2 IS MIN, A3 IS SEC.
- 1060 '* CHANGE THESE OR WRITE AN INPUT STATEMENT IF YOU WANT TO
- 1070 '* EVALUATE OTHER METEOR SHOWERS (OR OTHER CELESTIAL OBJECTS)
- 1080 A$= STR$(RAHOUR): A2=RAMIN: A3=0
- 1090 GOSUB 2630: R=A*15*R1
- 1100 '* INPUT DECLINATION, SAME COMMENTS AS ABOVE
- 1110 A$=STR$(DEC): A2=0: A3=0
- 1120 GOSUB 2630: DEG=A*R1
- 1130 IF WHICH<>4 THEN 1180
- 1140 PRINT: PRINT " ...PLEASE WAIT..."
- 1150 FOR BESTDIR=0 TO 355 STEP 5
- 1160 ANGLE=BESTDIR
- 1170 GOTO 1320
- 1180 IF WHICH=2 AND COUNTR=1 THEN 1350
- 1190 '* THIS SECTION CHOOSES PATHS IN 45 DEGREE STEPS
- 1200 IF DIRECTION=9 THEN GOSUB 3450:GOSUB 2990:GOTO 1380
- 1210 IF DIRECTION=1 THEN ANGLE=0:WAY$="North"
- 1220 IF DIRECTION=2 THEN ANGLE=45:WAY$="Northeast"
- 1230 IF DIRECTION=3 THEN ANGLE=90:WAY$="East"
- 1240 IF DIRECTION=4 THEN ANGLE=135:WAY$="Southeast"
- 1250 IF DIRECTION=5 THEN ANGLE=180:WAY$="South"
- 1260 IF DIRECTION=6 THEN ANGLE=225:WAY$="Southwest"
- 1270 IF DIRECTION=7 THEN ANGLE=270:WAY$="West"
- 1280 IF DIRECTION=8 THEN ANGLE=315:WAY$="Northwest"
- 1290 IF DIRECTION=10 THEN ANGLE=LOOK
- 1300 '* "RIGHT" AND "RIGHT2" ARE THE AZIMUTH OF POINTS AT
- 1310 '* 90 DEGREE ANGLES TO THE PATH OF INTEREST.
- 1320 RIGHT=(ANGLE+90) MOD 360:RIGHT2=(ANGLE+270) MOD 360
- 1330 IF WHICH=3 OR COUNTR=0 THEN IF ROUNDS=0 THEN GOSUB 4450
- 1340 IF ROUNDS=0 THEN MIDLATD=CIRLATD:MIDLOND=CIRLOND
- 1350 IF WHICH=2 AND COUNTR=0 THEN GOSUB 2990 'set up graph
- 1360 '* MIDLATD AND MIDLOND ARE THE SPOTS HALFWAY ALONG THE
- 1370 '* PATH OF INTEREST (THIS IS WHERE THE METEORS NEED TO BE).
- 1380 B=MIDLATD:L=MIDLOND
- 1390 B=B*R1:L=L*R1
- 1400 '* THIS SECTION DETERMINES THE AZ AND EL OF THE RADIANT BASED
- 1410 '* ON ITS R.A. AND DEC. AT PATH MIDPOINT.
- 1420 T5=T-R+L:REM LHA
- 1430 COSDEG=COS(DEG):SINDEG=SIN(DEG)
- 1440 SINB=SIN(B)
- 1450 S1=SINB*SINDEG
- 1460 COSINB=COS(B)
- 1470 S1=S1+COSINB*COSDEG*COS(T5)
- 1480 C1=1-S1*S1
- 1490 IF C1>0 THEN C1=SQR(C1)
- 1500 IF C1<=0 THEN 1520
- 1510 H=ATN(S1/C1):GOTO 1530
- 1520 H=SGN(S1)*P/2
- 1530 C2=(COSINB*SINDEG)-SINB*COSDEG*COS(T5)
- 1540 S2=-COSDEG*SIN(T5)
- 1550 IF C2=0 THEN A=SGN(S2)*P/2:GOTO 1580
- 1560 A=ATN(S2/C2)
- 1570 IF C2<0 THEN A=A+P
- 1580 IF A <0 THEN A=A+2*P
- 1590 ELEV=H/R1: AZIM=A/R1
- 1600 '* LOAD ARRAY WITH AZ, EL DATA
- 1610 IF WHICH<>2 THEN 1660
- 1620 LAZIM(ENDER)=AZIM
- 1630 LELEV(ENDER)=ELEV
- 1640 LDATE(ENDER)=DAY
- 1650 LTIME(ENDER)=TIME
- 1660 IF ELEV<0 THEN 1980
- 1670 QUAL=0: BEST=0
- 1680 '* ROUTINE TO INDICATE THE TIMES WHEN THE RADIANT IS
- 1690 '* WITHIN +/- 15 DEG OF PERPENDICULAR TO THE DESIRED
- 1700 '* PATH (GOOD) AND WHEN IT IS ALSO WITHIN +/- 15 DEG OF
- 1710 REM *** 45 DEG ELEVATION AT PATH MIDPOINT (BEST).
- 1720 TIM$=STR$(TIME):TIM$=RIGHT$(TIM$,LEN(TIM$)-1)+"z"
- 1730 IF LEN(TIM$)<5 THEN TIM$="0"+TIM$:GOTO 1730
- 1740 IF ELEV<20 AND WHICH=4 THEN 1800
- 1750 IF ELEV<20 THEN 1880
- 1760 IF (AZIM>(RIGHT-15) AND AZIM<(RIGHT+15)) OR (AZIM>(RIGHT2-15) AND AZIM<(RIGHT2+15)) THEN QUAL=1
- 1770 IF QUAL=1 AND ELEV>30 AND ELEV<60 THEN BEST=1
- 1780 IF WHICH<>4 THEN 1880
- 1790 IF BEST=1 AND ABS(45-ELEV)<ABS(45-BESTEL) THEN OPTDIR=ANGLE:BESTEL=ELEV
- 1800 NEXT BESTDIR
- 1810 COLOR 15
- 1820 IF OPTDIR>1 THEN 1860
- 1830 PRINT: PRINT " No Good Directions at ";TIM$
- 1840 PRINT: PRINT " RUN OPTION 2 TO CHECK IF RADIANT IS ABOVE HORIZON"
- 1850 COLOR 7:GOTO 2420
- 1860 PRINT:PRINT " Best Direction at ";TIM$;" =";OPTDIR;"<UNK! {00F8}>"
- 1870 COLOR 7:GOTO 2420
- 1880 IF WHICH=3 THEN 1930
- 1890 IF QUAL=1 AND BEST=0 THEN LOCATE 23,10:PRINT "Good Time: ";TIM$
- 1900 COLOR 15
- 1910 IF BEST=1 AND ABS(45-ELEV)<ABS(45-BESEL) THEN BESEL=ELEV:BESTIME=TIME:BESTIM$=TIM$
- 1920 COLOR 7
- 1930 IF WHICH=3 AND HEADER=0 THEN GOSUB 3190
- 1940 IF QUAL=1 AND BEST=0 AND WHICH=3 THEN PRINT " "+TIM$,WAY$;:GOSUB 4890
- 1950 COLOR 15
- 1960 IF BEST=1 AND WHICH=3 THEN LOCATE ,30:PRINT TIM$,WAY$;:GOSUB 4890
- 1970 COLOR 7
- 1980 IF WHICH <>2 THEN 2180
- 1990 IF COUNTR<>0 THEN 2060
- 2000 LOCATE 21,5
- 2010 PRINT"NORTH SOUTH NORTH"
- 2020 '* PLOT THE APPROXIMATE AZ, EL DATA FOR
- 2030 '* THE RADIANT AS A FUNCTION OF TIME.
- 2040 '* THE 'LOCATE' ARGUMENT IS DERIVED FROM
- 2050 '* INTEGER VALUES OF AZ AND EL.
- 2060 J=CINT(AZIM/6)+5
- 2070 I=CINT(20-(ELEV/5))
- 2080 IF I<=0 THEN I=1
- 2090 IF I>20 THEN I=20
- 2100 PNT$=STR$(INT(TIME/100))
- 2110 PNT$=RIGHT$(PNT$,LEN(PNT$)-1)
- 2120 IF LEN(PNT$)<2 THEN PNT$="0"+PNT$:GOTO 2120
- 2130 IF I=20 THEN 2180
- 2140 REM *** HIGHLIGHT BEST TIMES ON THE GRAPH
- 2150 IF BEST=1 THEN COLOR 15
- 2160 LOCATE I,J: PRINT "*";PNT$+"z"
- 2170 COLOR 7
- 2180 TIMECOUNT=TIMECOUNT+INCR
- 2190 IF TIMECOUNT-(INT(TIMECOUNT/100)*100)=>60 THEN TIMECOUNT=TIMECOUNT+40
- 2200 TIME=TIME+INCR
- 2210 COUNTR=1:ENDER=ENDER+1
- 2220 ROUNDS=1
- 2230 IF TIMECOUNT<FINISH THEN 1020
- 2240 IF WHICH=2 AND DIRECTION<9 THEN LOCATE 23,55: PRINT WAY$;" Path"
- 2250 IF WHICH=2 AND DIRECTION>8 THEN LOCATE 23,55:PRINT"Bearing"CINT(ANGLE)"<UNK! {00F8}>"
- 2260 IF WHICH=3 THEN NEXT DIRECTION:PRINT UL$;:GOSUB 4890:GOTO 2600
- 2270 IF BESTIME=0 THEN 2290
- 2280 LOCATE 23,30: PRINT "Best Time: "BESTIM$
- 2290 GOSUB 4960:CLS
- 2300 PRINT " Shower: ";SHOWER$: PRINT
- 2310 PRINT" DAY","TIME (UTC)","AZIMUTH","ELEVATION"
- 2320 FOR K=1 TO ENDER-1
- 2330 LD$=STR$(LDATE(K)):LD$=RIGHT$(LD$,LEN(LD$)-1)
- 2340 IF LEN(LD$)<2 THEN LD$="0"+LD$:GOTO 2340
- 2350 LT$=STR$(LTIME(K)):LT$=RIGHT$(LT$,LEN(LT$)-1)
- 2360 IF LEN(LT$)<4 THEN LT$="0"+LT$:GOTO 2360
- 2370 PRINT " "LD$;TAB(18)LT$;
- 2380 PRINT TAB(30)USING "###.#<UNK! {00F8}>";LAZIM(K);
- 2390 PRINT TAB(44)USING "###.#<UNK! {00F8}>";LELEV(K);:GOSUB 4890
- 2400 NEXT K
- 2410 PRINT UL$;
- 2420 GOSUB 4960:LOCATE 25,1:PRINT STRING$(79,32);:LOCATE 25,24:COLOR 0,7
- 2430 PRINT " Press 1 to continue or 0 to quit ";:COLOR 7,0
- 2440 Z$=INKEY$:IF Z$=""THEN 2440
- 2450 IF Z$="0"THEN 320
- 2460 IF Z$="1"THEN COUNTR=0:ENDER=0:PRINTED=0:BESTEL=999:GOTO 280
- 2470 GOTO 2440
- 2480 '
- 2490 '* FROM "ASTRONOMICAL CALENDAR 1985" BY GUY OTTWELL
- 2500 DATA QUADRANTIDS,282.80,1,4,14 hours,41.5,110,15,28,50,B,100
- 2510 DATA LYRIDS,31.4,4,21,2.3 days,47,Variable,18,8,32,BC,105
- 2520 DATA ETA AQUARIDS,44,5,4,3 days,67,21,22,20,-1,C2,115
- 2530 DATA ARIETIDS,75.0,6,5,Rich but small,37,60,2,56,23,Unknown,100
- 2540 DATA PERSEIDS,139.3,8,11,4.6 days,60,68,3,4,58,C2,110
- 2550 DATA DRACONIDS, 196.3,10,10,1.2 hours,21,42,17,28,54,C1,97
- 2560 DATA ORIONIDS, 207,10,20,2 days,67,35,6,20,15,C2,115
- 2570 DATA LEONIDS, 234.7,11,16,4 days,71,40,10,8,22,C2,150
- 2580 DATA GEMINIDS, 261.9,12,13,2.6 days,35,58,7,28,32,B,95
- 2590 '
- 2600 '.....end
- 2610 GOSUB 4960:GOTO 320
- 2620 '
- 2630 '.....SEXAGESIMAL TO DECIMAL CONVERSION
- 2640 S=1: A1=ABS(VAL(A$))
- 2650 IF LEFT$(A$,1)="-" THEN S=-1
- 2660 A=S*(A1+A2/60+A3/3600)
- 2670 RETURN
- 2680 '
- 2690 '.....GREENWICH MEAN SIDERIAL TIME CONVERSION
- 2700 HOUR=INT(TIME/100)
- 2710 MIN=TIME-(HOUR*100)
- 2720 IF MIN=>60 THEN TIME=TIME+40:GOTO 2700
- 2730 IF TIME>2400 THEN TIME=TIME-2400:DAY=DAY+1
- 2740 HOUR=HOUR/24:MIN=MIN/1440
- 2750 D=DAY+HOUR+MIN
- 2760 D1=INT(D):F=D-D1-0.5
- 2770 J=-INT(7*(INT((M+9)/12)+Y)/4)
- 2780 S=SGN(M-9):A=ABS(M-9)
- 2790 J1=INT(Y+S*INT(A/7))
- 2800 J1=-INT((INT(J1/100)+1)*3/4)
- 2810 J=J+INT(275*M/9)+D1+J1
- 2820 J=J+1.72103E+06+2+367*Y
- 2830 IF F>=0 THEN 2860
- 2840 F=F+1:J=J-1
- 2850 D=J-2.45154E+06
- 2860 T=D/36525:T1=INT(T)
- 2870 J0=T1*36525+2.45154E+06
- 2880 T2=(J-J0+0.5)/36525
- 2890 S=24110.5+184.813*T1
- 2900 S=S+8.64018E+06*T2
- 2910 S=S+0.093104*T*T
- 2920 S=S-6.198E-06*T*T*T
- 2930 S=S/86400:S=S-INT(S)
- 2940 S=24*(S+(F-0.5)*1.00274)
- 2950 IF S<0 THEN S=S+24
- 2960 IF S>24 THEN S=S-24
- 2970 RETURN
- 2980 '
- 2990 '.....graph diagram
- 3000 CLS:LOCATE 1,22:PRINT "Shower: "SHOWER$" ("M$"/"D$"/"Y$")"
- 3010 LOCATE 2,13
- 3020 PRINT "AZ, EL OF RADIANT AT PATH MIDPOINT: ";ABS(CINT(MIDLATD))"<UNK! {00F8}>"LA$".";
- 3030 PRINT " ";ABS(CINT(MIDLOND))"<UNK! {00F8}>"LO$"."
- 3040 FOR I=2 TO 20
- 3050 LOCATE I,3:PRINT (90-(I*5))+10
- 3060 NEXT I
- 3070 LOCATE 5,1 : PRINT "E": LOCATE 6,1 : PRINT "L": LOCATE 7,1 : PRINT "E"
- 3080 LOCATE 8,1 : PRINT "V": LOCATE 9,1 : PRINT "A": LOCATE 10,1: PRINT "T"
- 3090 LOCATE 11,1: PRINT "I": LOCATE 12,1: PRINT "O": LOCATE 13,1: PRINT "N"
- 3100 '
- 3110 '.....set bottom axis
- 3120 FOR J=5 TO 65 STEP 5
- 3130 LOCATE 20,J-1:PRINT (J-5)*6
- 3140 NEXT J
- 3150 LOCATE 11,7:PRINT STRING$(62,"-")
- 3160 LOCATE 22,55:PRINT "Home QTH"ABS(MYLATD)"<UNK! {00F8}>"LA$".";ABS(MYLOND)"<UNK! {00F8}>"LO$"."
- 3170 RETURN
- 3180 '
- 3190 '.....title option 3
- 3200 CLS
- 3210 PRINT "Shower: ";SHOWER$ " Date: "M$"/"D$"/"Y$" Peak at ";ZU$+"z"
- 3220 PRINT " GOOD TIMES"
- 3230 COLOR 15
- 3240 LOCATE 2,33: PRINT "BEST TIMES"
- 3250 COLOR 7
- 3260 HEADER=1
- 3270 RETURN
- 3280 '
- 3290 '.....CALCULATE ECLIPTIC LONGITUDE FROM ASTR.ALMANAC
- 3300 JC#=CDBL(J)
- 3310 FC#=CDBL(F)
- 3320 JD#=JC#+FC#
- 3330 REM *** JD# IS DOUBLE-PRECISION JULIAN DAY
- 3340 N#=JD#-2.45154E+06
- 3350 LONSUN#=280.46+(0.985647*N#)
- 3360 G#=357.528+(0.9856*N#)
- 3370 IF LONSUN#<0 THEN LONSUN#=LONSUN#+360
- 3380 IF G#<0 THEN G#=G#+360
- 3390 IF LONSUN#<0 THEN 3370
- 3400 IF G#<0 THEN 3380
- 3410 RCON#=180/3.14159
- 3420 LONSUNT#=LONSUN#+(1.915*SIN(G#/RCON#))+(0.02*SIN(2*(G#/RCON#)))
- 3430 RETURN
- 3440 '
- 3450 '.....bearing and distance
- 3460 U$="#####.#"
- 3470 IF DIRECTION<>9 THEN HISLATD=CIRLATD:HISLOND=CIRLOND
- 3480 DIFLOND=MYLOND-HISLOND
- 3490 MIDLATD=MYLATD-((MYLATD-HISLATD)/2)
- 3500 IF DIFLOND<-180 THEN DIFLOND=DIFLOND+360
- 3510 IF DIFLOND>180 THEN DIFLOND=DIFLOND-360
- 3520 '.....degrees to radians
- 3530 HISLAT=HISLATD*R1:HISLON=HISLOND*R1
- 3540 DIFLON=DIFLOND*R1
- 3550 '.....distance
- 3560 COSB=(SMYLAT*SIN(HISLAT))+(CMYLAT*COS(HISLAT)*COS(DIFLON))
- 3570 BETA=FNACOS(COSB)
- 3580 BETA2=BETA/R1
- 3590 '.....factor 69.05 for stat.mi., 111.2 for km
- 3600 DIST=BETA2*69.05
- 3610 '.....bearing
- 3620 COSA=(SIN(HISLAT)-(SMYLAT*COSB))/(CMYLAT*SIN(BETA))
- 3630 '.....corect round-off errors
- 3640 IF COSA>1 THEN COSA=1
- 3650 IF COSA<-1 THEN COSA=-1
- 3660 AZ=FNACOS(COSA)
- 3670 ANGLE=AZ/R1
- 3680 '* HAFLON IS THE LON OF A POINT BETWEEN HERE AND THERE
- 3690 HAF=CMYLAT*COS(MIDLATD*R1)
- 3700 HAFLON=FNACOS((COS(BETA/2)-(SMYLAT*SIN(MIDLATD*R1)))/HAF)
- 3710 IF DIFLOND>0 THEN ANGLE=360-ANGLE
- 3720 IF DIRECTION<>9 OR PRINTED=1 OR WHICH<>2 THEN 3790
- 3730 PRINT:PRINT " Distance="USING U$;DIST;
- 3740 PRINT " stat.miles ("USING U$;BETA2*111.2;
- 3750 PRINT "km): Bearing=";USING U$;ANGLE;:PRINT "<UNK! {00F8}>"
- 3760 COLOR 0,7:PRINT " Press any key to continue ":COLOR 7,0
- 3770 IF INKEY$=""THEN 3770
- 3780 PRINTED=1
- 3790 IF ANGLE>180 THEN HAFLON=MYLON-HAFLON ELSE HAFLON=MYLON+HAFLON
- 3800 MIDLOND=HAFLON/R1
- 3810 RETURN
- 3820 '
- 3830 '.....READ DATA AND CALCULATE PEAK DATE/TIME
- 3840 FOR I=1 TO SHOWER
- 3850 READ SHOWER$,ELON,M,DAY,DURATION$,VELOCITY$
- 3860 READ RATE$,RAHOUR,RAMIN,DEC,CLASS$,HEIGHT
- 3870 NEXT I
- 3880 RESTORE
- 3890 COLOR 0,7:INPUT " ENTER: Year....";Y
- 3900 LOCATE CSRLIN-1:PRINT ".....ITERATION ON PROGRESS - PLEASE WAIT....."
- 3910 TIME=0
- 3920 COLOR 7,0:GOSUB 2690
- 3930 GOSUB 3290
- 3940 IF LONSUNT#>ELON THEN 3990
- 3950 DAY=DAY+1
- 3960 GOSUB 2690
- 3970 GOSUB 3290
- 3980 GOTO 3940
- 3990 IF LONSUNT#<=ELON THEN 4040
- 4000 E2=LONSUNT#
- 4010 DAY=DAY-1
- 4020 GOSUB 2690
- 4030 GOSUB 3290
- 4040 T=24*((ELON-LONSUNT#)/(E2-LONSUNT#))
- 4050 H0=INT(T)
- 4060 M1=INT(60*(T-H0)+0.5)
- 4070 GMT=100*H0+M1
- 4080 IF GMT<0 THEN DAY=DAY-1: GOTO 3920
- 4090 IF DAY<=31 THEN 4120
- 4100 DAY=DAY-31
- 4110 M=M+1
- 4120 CLS:LOCATE 2
- 4130 ZU$=STR$(GMT):ZU$=RIGHT$(ZU$,LEN(ZU$)-1)
- 4140 IF LEN(ZU$)<4 THEN ZU$="0"+ZU$:GOTO 4140
- 4150 M$=STR$(M):IF VAL(M$)<10 THEN M$=" 0"+RIGHT$(M$,1)
- 4160 D$=STR$(DAY):IF VAL(D$)<10 THEN D$=" 0"+RIGHT$(D$,1)
- 4170 M$=RIGHT$(M$,2):D$=RIGHT$(D$,2):Y$=RIGHT$(STR$(Y),4):
- 4180 PRINT " The";:COLOR 0,7:PRINT "OFF";SHOWER$;"INKEY$";:COLOR 7,0
- 4190 PRINT "meteor shower will peak at "ZU$" UTC on ";
- 4200 PRINT M$"/"D$"/"Y$" (mo/da/yr)"
- 4210 IF WHICH>1 THEN 900
- 4220 PRINT UL$;
- 4230 PRINT " Duration above Quarter Max.... ";DURATION$
- 4240 PRINT " Velocity...................... ";VELOCITY$" km/sec"
- 4250 PRINT " Average Height of Ionization.. ";HEIGHT"km"
- 4260 PRINT " Meteors per hour (approx.).... ";RATE$
- 4270 PRINT " E.L. used for calculation..... ";ELON"<UNK! {00F8}> (Epoch 2000.0)"
- 4280 PRINT " R.A. of Radiant............... ";RAHOUR"hr"RAMIN;"min"
- 4290 PRINT " Declination................... ";DEC"<UNK! {00F8}>"
- 4300 PRINT " Ceplecha's Class.............. ";CLASS$
- 4310 TIME=GMT:GOSUB 2690:GOSUB 3290:ROUNDLON=INT(LONSUNT#*1000)/1000
- 4320 PRINT
- 4330 PRINT " (the E.L.values below are for checking the";
- 4340 PRINT " calculated E.L. against the Nautical Almanac)"
- 4350 PRINT
- 4360 PRINT " E.L. at "ZU$" UTC =";USING "####.###";ROUNDLON;:PRINT "<UNK! {00F8}>"
- 4370 TIME=0: GOSUB 2690: GOSUB 3290: ROUNDLON=INT(LONSUNT#*1000)/1000
- 4380 DEGLON=INT(LONSUNT#): MINLON=INT((LONSUNT#-DEGLON)*60)
- 4390 SECLON=(INT((((LONSUNT#-DEGLON)*60)-MINLON)*60)*100)/100
- 4400 PRINT " E.L. at 0000 UTC =";USING "####.###";ROUNDLON;:PRINT "<UNK! {00F8}> (";
- 4410 PRINT DEGLON;"<UNK! {00F8}>";MINLON;"'";SECLON;CHR$(34);" )"
- 4420 GOTO 2600
- 4430 '
- 4440 '.....CALCULATE LAT, LON OF A 500-MI RADIUS CIRCLE (PATH MIDPOINT)
- 4450 COSA2=COS(ANGLE*R1): 'ANGLE IS THE BEARING FROM YOUR QTH
- 4460 '* CIRLATD IS THE LATITUDE OF THE POINT
- 4470 CIRLAT=FNARSIN ((COSA2*CMYLAT*SINBETA2)+(SMYLAT*COSBETA2))
- 4480 CIRLATD=CIRLAT/R1
- 4490 '* CIRLOND IS THE LONGITUDE OF THE POINT
- 4500 CIRLON= (COSBETA2-(SMYLAT*SIN(CIRLAT)))/(CMYLAT*COS(CIRLAT))
- 4510 IF CIRLON>1 THEN CIRLON=1
- 4520 IF CIRLON<-1 THEN CIRLON=-1
- 4530 CIRLON=FNACOS(CIRLON)
- 4540 IF ANGLE>180 THEN CIRLON=MYLON-CIRLON ELSE CIRLON=MYLON+CIRLON
- 4550 CIRLOND=CIRLON/R1
- 4560 RETURN
- 4570 '
- 4580 '.....initialize variables
- 4590 P=3.14159:R1=P/180
- 4600 MYLON=MYLOND*R1:MYLAT=MYLATD*R1
- 4610 CMYLAT=COS(MYLAT):SMYLAT=SIN(MYLAT)
- 4620 CIRRANGE=500:CIRBETA2=(CIRRANGE/69.05)*R1: 'FOR KM CHANGE 69.05 TO 111.2
- 4630 COSBETA2=COS(CIRBETA2):SINBETA2=SIN(CIRBETA2)
- 4640 RETURN
- 4650 '
- 4660 '.....preface
- 4670 TB=7
- 4680 PRINT TAB(TB);
- 4690 PRINT "This program calculates the peak time for major meteor showers."
- 4700 PRINT TAB(TB);
- 4710 PRINT "It also provides information concerning the optimum times for"
- 4720 PRINT TAB(TB);
- 4730 PRINT "particular paths in graphic and tabular form. The program is an"
- 4740 PRINT TAB(TB);
- 4750 PRINT "edited version of an original program by Michael R. Owen, W9IP,"
- 4760 PRINT TAB(TB);
- 4770 PRINT "and other programs by Russ Wicker, W4WD, and Joe Reisert, W1JR."
- 4780 PRINT
- 4790 PRINT TAB(TB);
- 4800 PRINT "References:"
- 4810 PRINT TAB(TB);
- 4820 PRINT "Astronomical Calendar 1985, by G.Ottwell, Furman U., Greenville SC."
- 4830 PRINT TAB(TB);
- 4840 PRINT "Astronomical Almanac for 1985, page C24.
- 4850 PRINT TAB(TB);
- 4860 PRINT "The 1997 ARRL Handbook for Radio Amateurs, page 21.13."
- 4870 RETURN
- 4880 '
- 4890 '.....end of page
- 4900 LN=CSRLIN
- 4910 IF LN<24 THEN PRINT " ":GOTO 4940
- 4920 GOSUB 4960:GOTO 4930
- 4930 CLS
- 4940 RETURN
- 4950 '
- 4960 'HARDCOPY
- 4970 GOSUB 5080:LOCATE 25,2:COLOR 14,6
- 4980 PRINT " Press 1 to print screen, 2 to print screen & ";
- 4990 PRINT "advance paper, or 3 to continue.";:COLOR 7,0
- 5000 Z$=INKEY$:IF Z$="3"THEN GOSUB 5080:RETURN
- 5010 IF Z$="1"OR Z$="2"THEN GOSUB 5080:GOTO 5030
- 5020 GOTO 5000
- 5030 FOR QX=1 TO 24:FOR QY=1 TO 80
- 5040 LPRINT CHR$(SCREEN(QX,QY));
- 5050 NEXT QY:NEXT QX
- 5060 IF Z$="2"THEN LPRINT CHR$(12)
- 5070 GOTO 4970
- 5080 LOCATE 25,1:PRINT STRING$(80,32);:RETURN
-